package com.leetcode.周赛.第227场;

/**
 * @author: ZhouBert
 * @date: 2021/2/7
 * @description: 5673. 移除石子的最大得分
 * https://leetcode-cn.com/contest/weekly-contest-227/problems/maximum-score-from-removing-stones/
 */
public class B_5673_移除石子的最大得分 {

	public static void main(String[] args) {


	}

	/**
	 * 这个可以直接用规律发现，而不用使用 DP
	 * --
	 * 1.每次找到最大的和第二大的
	 *
	 * @param a
	 * @param b
	 * @param c
	 * @return
	 */
	public int maximumScore(int a, int b, int c) {
		//1.建模
		int res = 0;
		int[] arr = new int[3];
		int zeroNum = 0;
		if (a == 0) {
			zeroNum++;
		}
		if (b == 0) {
			zeroNum++;
		}
		if (c == 0) {
			zeroNum++;
		}
		if (zeroNum >= 2) {
			//如果已经有大于两个的空堆
			return res;
		}
		arr[0] = a;
		arr[1] = b;
		arr[2] = c;
		//记录最大和第二大的索引
		int maxIndex = 0, minIndex = 0;
		int maxValue = arr[0];
		int minValue = arr[1];
		for (int i = 1; i < 3; i++) {
			if (arr[i] > maxValue) {
				maxValue = arr[i];
				maxIndex = i;
			}
			if (arr[i] < minValue) {
				minValue = arr[i];
				minIndex = i;
			}
		}
		if (maxIndex == minIndex) {
			//此时说明值都是一样的
			maxIndex = 0;
			minIndex = 1;
		}
		//第二大的索引值
		int big2Index = 3 - maxIndex - minIndex;
		//2.开始执行过程
		while (zeroNum < 2) {
			if (--arr[maxIndex] == 0) {
				zeroNum++;
			}
			if (--arr[big2Index] == 0) {
				zeroNum++;
			}
			if (arr[minIndex] > arr[maxIndex]) {
				int temp = minIndex;
				minIndex = maxIndex;
				maxIndex = temp;
			}else if (arr[minIndex] > arr[big2Index]){
				int temp = minIndex;
				minIndex = big2Index;
				big2Index = temp;
			}

			res++;
		}
		return res;
	}
}
